package com.eian.boot.crypto.utils;

import java.nio.charset.StandardCharsets;
import java.util.Base64;

/**
 * Base64 编解码工具类
 *
 * @author eian
 */
public class Base64Utils {

    private Base64Utils() {
    }

    /**
     * Base64 编码
     *
     * @param data 原始数据
     * @return Base64编码后的字符串
     */
    public static String encode(byte[] data) {
        if (data == null || data.length == 0) {
            return "";
        }
        return Base64.getEncoder().encodeToString(data);
    }

    /**
     * Base64 编码
     *
     * @param data 原始字符串
     * @return Base64编码后的字符串
     */
    public static String encode(String data) {
        if (data == null || data.isEmpty()) {
            return "";
        }
        return encode(data.getBytes(StandardCharsets.UTF_8));
    }

    /**
     * Base64 解码
     *
     * @param base64 Base64编码的字符串
     * @return 解码后的字节数组
     */
    public static byte[] decode(String base64) {
        if (base64 == null || base64.isEmpty()) {
            return new byte[0];
        }
        return Base64.getDecoder().decode(base64);
    }

    /**
     * Base64 解码为字符串
     *
     * @param base64 Base64编码的字符串
     * @return 解码后的字符串
     */
    public static String decodeToString(String base64) {
        if (base64 == null || base64.isEmpty()) {
            return "";
        }
        return new String(decode(base64), StandardCharsets.UTF_8);
    }

    /**
     * URL安全的 Base64 编码
     *
     * @param data 原始数据
     * @return Base64编码后的字符串
     */
    public static String encodeUrlSafe(byte[] data) {
        if (data == null || data.length == 0) {
            return "";
        }
        return Base64.getUrlEncoder().encodeToString(data);
    }

    /**
     * URL安全的 Base64 解码
     *
     * @param base64 Base64编码的字符串
     * @return 解码后的字节数组
     */
    public static byte[] decodeUrlSafe(String base64) {
        if (base64 == null || base64.isEmpty()) {
            return new byte[0];
        }
        return Base64.getUrlDecoder().decode(base64);
    }
}

